#ifndef __CLASSES_H__
#define __CLASSES_H__

#include <math.h>
#include <gsl/gsl_math.h>
#include <gsl/gsl_sf_bessel.h>
#include <gsl/gsl_const_mksa.h>
#include <QString>

class Integrals {
	public:
		__complex__ double check;
		__complex__ double RES[9]; //results: RES[0,1,2] - rot, RES[3,4,5] - grad, RES[6,7,8] - j
		
		QString textParam;
		int difQ[4];
		
		double f0,w,k;		//wave properties
		double a,b,Dist;				//geometry, Dist - distantion
		double alfa1,beta;
                __complex__ double alfa2,G1,G2;	//КОМПЛЕКСНАЯ ВЕЛИЧИНА
                float e1,m1,e2,m2;		//параметры сред
		double R,teta,fi,Z;		//coordinates
                double cosa(double fis);	//cos(alfa)
		double cosb(double fis);
		double cosg(double fis);	//cos(gamma)
		double cosd(double fis);	//cos(delta)

		__complex__ double cexp(double rr); 	//Волновой множитель {exp(-ikr)/r}
		__complex__ double cexp0(double ro, double fis); 	//Волновой множитель {exp(ik ro cosg)}
		__complex__ double G(int);		//Постоянные Г1 и Г2
		
		__complex__ double Ero1(double ro,double fis);
		__complex__ double Efi1(double ro,double fis);
		__complex__ double Hro1(double ro,double fis);
		__complex__ double Hfi1(double ro,double fis);
		
		__complex__ double Ero2(double ro,double fis);
		__complex__ double Efi2(double ro,double fis);
		__complex__ double Hro2(double ro,double fis);
		__complex__ double Hfi2(double ro,double fis);
		
		double I1r,I1b,I0r,I0b;
		double K1r,K1b,K0r,K0b;
		double js1(double ro);		//Производная от функции Бесселя J1(alfa1*ro)
		double ys1(double ro);		//Производная от функции Бесселя Y1(alfa1*ro)
		
		double alfa();
		
	private:
		double R1(double ro);	//Параметр R1
		__complex__ double Rs1(double ro);	//Параметр R'1
		__complex__ double S1(double ro);	//Параметр S1
		double Ss1(double ro);	//Параметр S'1
		
		__complex__ double ji1(double ro);	//Функция Бесселя от мнимого аргумента
		__complex__ double yi1(double ro);	//Функция Неймана от мнимого аргумента
		double js2(double);		//Производная от функции Бесселя J0(alfa2*ro) с мнимым аргументом
		__complex__ double ys2(double);		//Производная от функции Бесселя J0(alfa2*ro) с мнимым аргументом
};

#endif // __CLASSES_H__
